package com.xxxx.funs

/**
 * @program: test01
 * @description: ${description}
 * @author: CoreDao
 * @create: 2021-03-02 17:29
 **/

object Funs {
  def main(args: Array[String]): Unit = {

    /**
     * 递归函数
     *  1.递归的定义以及终止条件
     *  2.不能省略函数的返回类型
     *  5的阶乘
     */
    def fun2(num:Int):Int={
      if(num ==1)
        num
      else
        num * fun2(num-1)
    }
    println(fun2(num = 5))

    /**
     * 包含参数默认值的函数
     *  1.有默认值可以不传递参数，但要注意默认值参数的位置，可以指定参数进行赋值
     *
     */
    /*def fun3(a:Int=5,b:Int)={
      a+b
    }
    println(fun3(b=4))*/
    def fun3(a:Int=5,b:Int=9)={
      a+b
    }
    println(fun3(100))

    /**
     * 可变参数个数的函数，可变参数就是不定长数组
     * java中是int...（三个点）
     * Scala中是*
     */
    def fun4(a:Int*)={
      var sum = 0
      for(i<-a){
        sum += i
      }
      sum
    }
    println(fun4(1,2,3,4,5,6))

    /**
     * 匿名函数 ()=>{}
     * (形参列表) => {函数体}
     * 后期经常和高阶函数结合一起使用
     *  1.有参数的匿名函数
     *  2.无参数的匿名函数
     *  3.有返回值的匿名函数
     */
    val function1: (Int, Int) => Int = (a: Int, b: Int) => {
      a + b
    }
    println(function1(1,2))

    def sum(a:Int,b:Int)={
      a+b
    }
    println(sum(1,2))

    val function2: () => Unit = () => {
      println("这是一个无参构造函数")
    }
    function2()

  }


}
